#ifndef __DOUBLELINKLIST_H_
#define __DOUBLELINKLIST_H_
#define ElementType void*

typedef struct Node
{
    ElementType data;
    struct Node *next;
    struct Node *prev;
}Node;

typedef struct DoubleLinkList
{
    Node *head;
    Node *tail;
    int len;
}DLList;

int InitDLinkList(DLList *list);//双链表的初始化
void InsertTail(DLList *list,ElementType element);//双链表的尾插法
void InsertHead(DLList *list,ElementType element);//双链表的头插法
int FindFirstByElement(DLList *list,ElementType element);//寻找双链表中与element第一个匹配的，并返回其位置
void RemoveByIndex(DLList *list,int index);//按位置删除双链表
void RemoveByElement(DLList *list,ElementType element);//按值删除双链表
void DLTrave(DLList *list,void (*func)(ElementType));//双链表的遍历(回调函数)
void FreeDLinkList(DLList *list,void (*func)(ElementType));//双链表的内存释放
int GetListLen(DLList *list);












#endif